      1  public class Palindromes

      2  {

      3     public static void main(String[] args)

      4     {

      5        String sentence1 = "Madam, I'm Adam!";

      6        System.out.println(sentence1);

      7        System.out.println("Palindrome: " + isPalindrome(sentence1));

      8        String sentence2 = "Sir, I'm Eve!";

      9        System.out.println(sentence2);

     10        System.out.println("Palindrome: " + isPalindrome(sentence2));

     11     }

     12

     13     /**

     14        Tests whether a text is a palindrome.

     15        @param text a string that is being checked

     16        @return true if text is a palindrome, false otherwise

     17     */

     18     public static boolean isPalindrome(String text)

     19     {

     20        int length = text.length();

     21

     22        // Separate case for shortest strings.

     23        if (length <= 1) { return true; }

     24        else

     25        {

     26           // Get first and last characters, converted to lowercase.

     27           char first = Character.toLowerCase(text.charAt(0));

     28           char last = Character.toLowerCase(text.charAt(length - 1));

     29

     30           if (Character.isLetter(first) && Character.isLetter(last))

     31           {

     32              // Both are letters.

     33              if (first == last)

     34              {

     35                 // Remove both first and last character.

     36                 String shorter = text.substring(1, length - 1);

     37                 return isPalindrome(shorter);

     38              }

     39              else

     40              {

     41                 return false;

     42              }

     43           }

     44           else if (!Character.isLetter(last))

     45           {

     46              // Remove last character.

     47              String shorter = text.substring(0, length - 1);

     48              return isPalindrome(shorter);

     49           }

     50           else

     51           {

     52              // Remove first character.

     53              String shorter = text.substring(1);

     54              return isPalindrome(shorter);

     55           }

     56        }

     57     }

     58  }